//
//  MultistageTableView.h
//  Wujin
//
//  Created by cz on 2016/12/11.
//  Copyright © 2016年 dong. All rights reserved.
//

#import <UIKit/UIKit.h>

@protocol MTableViewDataSource,MTableViewDelegate;

@interface MultistageTableView : UIView<UITableViewDelegate, UITableViewDataSource>

/**
 *  数据源相关委托
 */
@property (nonatomic,assign) id <MTableViewDataSource> dataSource;

/**
 *  事件回调相关委托
 */
@property (nonatomic,assign) id <MTableViewDelegate>   delegate;

/**
 *  展开的列表层级索引 Default is [NSIndexPath indexPathForRow:-1 inSection:-1]
 */
@property (nonatomic,readonly,strong) NSIndexPath *openedIndexPath;

/**
 *  主体列表对象
 */
@property (nonatomic,readonly,strong) UITableView *tableView;

/**
 *  列表单元添加复用标识
 *
 *  @param identifier 复用标识字符串
 *
 *  @return 列表单元对象
 */
- (id)dequeueReusableCellWithIdentifier:(NSString *)identifier;

- (id)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath;

- (id)dequeueReusableHeaderFooterViewWithIdentifier:(NSString *)identifier;

/**
 *  模拟列表Cell点击事件 -1 为关闭
 *
 *  @param indexPath cell所在路径
 */
- (void)sendCellTouchActionWithIndexPath:(NSIndexPath *)indexPath;

/**
 *  模拟列表Header点击事件 －1 为关闭
 *
 *  @param section header 索引
 */
- (void)sendHeaderTouchActionWithSection:(NSInteger)section;

/**
 *  重新加载数据
 */
- (void)reloadData;

@end
/**
 *  TQMultistageTableView 数据协议
 */
@protocol MTableViewDataSource <NSObject>

@required
- (NSInteger)mTableView:(MultistageTableView *)mTableView numberOfRowsInSection:(NSInteger)section;

- (UITableViewCell *)mTableView:(MultistageTableView *)mTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

@optional

- (NSInteger)numberOfSectionsInTableView:(MultistageTableView *)mTableView;

@end

/**
 *  TQMultistageTableView 委托协议
 */
@protocol MTableViewDelegate <NSObject>

@optional

- (CGFloat)mTableView:(MultistageTableView *)mTableView heightForHeaderInSection:(NSInteger)section;

- (CGFloat)mTableView:(MultistageTableView *)mTableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;

- (UIView *)mTableView:(MultistageTableView *)mTableView viewForHeaderInSection:(NSInteger)section;

- (void)mTableView:(MultistageTableView *)mTableView willOpenHeaderAtSection:(NSInteger)section;

- (void)mTableView:(MultistageTableView *)mTableView willCloseHeaderAtSection:(NSInteger)section;

- (void)mTableView:(MultistageTableView *)mTableView willOpenRowAtIndexPath:(NSIndexPath *)indexPath;

- (void)mTableView:(MultistageTableView *)mTableView willCloseRowAtIndexPath:(NSIndexPath *)indexPath;

- (void)mTableView:(MultistageTableView *)mTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;

@end
